Welcome to pandas!

4.15 案列

1、筛选3个及以上大于90的记录

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.筛选大于90.xlsx" )

print (df)

t=df.分数.str.count( "9\d|\d{3}" )>=3

df1=df[t]

print (df1)

返回:

姓名 分数
0 张三 98、99、97
1 李四 94、100、96
2 王麻子 85、95、89、96
3 小专 98、80
4 小曾 97、91、99

姓名 分数
0 张三 98、99、97
1 李四 94、100、96
4 小曾 97、91、99

2、两表合并查询的应用

import pandas as pd

df1=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.两表合并查询的应用.xlsx","分数表" , index_col = 0 )

df2=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.两表合并查询的应用.xlsx","信息表" , index_col = 0 )

print (df1)

print (df2)

t=df1.姓名.str.cat(df2.籍贯, sep = "(",join="left")+")"

print (t)

返回:

姓名 分数
编号
NED01 王二麻 786
NED03 小明 698
NED04 李四 702
NED05 大飞 689

姓名 性别 籍贯
编号
NED01 王二麻 四川
NED02 小明 湖北
NED03 小曾 北京
NED04 李四 重庆
NED05 大飞 云南
NED06 张三 河北

编号
NED01 王二麻(四川)
NED03 小明(北京)
NED04 李四(重庆)
NED05 大飞(云南)

Name: 姓名, dtype: object


3、给关键信息加掩码

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.给关键信息加掩码.xlsx" )

print (df)

t=df.名单.str.replace( "([一-龥]+)([一-龥])" , lambda m: "#" *len(m[1])+m[2], regex = True )

print (t)

返回:

姓名 名单
0 1期 张三、李四、王麻子
1 2期 欧阳、小飞、大明
2 3期 大大志、小林、时克

0 #三、#四、##子
1 #阳、#飞、#明
2 ##志、#林、#克

Name: 名单, dtype: object


4、提取单价与数量后做统计

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.提取单价和数量后统计.xlsx" )

print (df)

df[ "采购金额" ]=df.采购记录.str.findall( "[\d.*]+" ).apply( lambda l:sum(df.eval(l)))

print (df)

返回:

日期 采购记录
0 2024-01-01 白菜3.4*5.2,菠菜5*12
1 2024-01-02 牛肉45*20,大葱3*12.5,西红柿1.5*10
2 2024-01-03 猪肉15*30
3 2024-01-04 大蒜4*100,茄子2.5*15

日期 采购记录 采购金额
0 2024-01-01 白菜3.4*5.2,菠菜5*12 77.68
1 2024-01-02 牛肉45*20,大葱3*12.5,西红柿1.5*10 952.50
2 2024-01-03 猪肉15*30 450.00
3 2024-01-04 大蒜4*100,茄子2.5*15 437.50

1、 提取不重复名单

import pandas as pd

s=pd.Series([ "语文120","数学130","英语111" ])

print (s)

t=s.sort_values(key= lambda s:s.str.findall( "\d+" ).map( lambda l:int(l[0])))

print (t)

返回:

0 语文120
1 数学130
2 英语111

dtype: object


2 英语111
0 语文120
1 数学130

dtype: object


import pandas as pd,numpy as np

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\素材测试.提取不重复名单.xlsx" )

print (df)

df [ "名单" ]=df.名单.str.findall( "(?m)[一-龥]+(?=、|$)" ).apply( lambda l:np.unique(l))

print (df)

#(?=、|$) 零宽断言、或者结尾

#(?m)表示多行

返回:

公司名 名单
0 成都分公司 1季度:张三、李四\n2季度:小陈、张三\n3季度:李四、小曾\n4季度:张三、李四
1 上海分公司 1季度:林林、小冲\n2季度:小思、小牛\n3季度:大聪明、小思\n4季度:林林、小冲
2 天津分公司 1季度:果果、小宝\n2季度:大牛、果果\n3季度:小宝、大牛\n4季度:果果、大牛

公司名 名单
0 成都分公司 [小曾, 小陈, 张三, 李四]
1 上海分公司 [大聪明, 小冲, 小思, 小牛, 林林]
2 天津分公司 [大牛, 小宝, 果果]

import pandas as pd,numpy as np

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\素材测试.对字符串中科目排序.xlsx" )

print (df)

df[ "排序后" ]=df.成绩.str.split( "、" ).map( lambda l:pd.Series(l).sort_values( ascending = True ,

key=lambda s:s.str.findall( "\d+" ).map( lambda l:int(l[0])))).str.join "、" )

print (df)

返回:

姓名 成绩
0 张三 语文120、数学130、英语111
1 李四 语文99、数学125、英语130
2 王二麻 语文123、数学114、英语121

姓名 成绩 排序后
0 张三 语文120、数学130、英语111 英语111、语文120、数学130
1 李四 语文99、数学125、英语130 语文99、数学125、英语130
2 王二麻 语文123、数学114、英语121 数学114、英语121、语文123